package com.group4.datafactorybackend.controller;

import com.group4.datafactorybackend.common.R;
import com.group4.datafactorybackend.common.enums.ResultCodeEnum;
import com.group4.datafactorybackend.entity.DO.DataCriterionDO;
import com.group4.datafactorybackend.entity.DTO.BatchReleaseOrOutageDTO;
import com.group4.datafactorybackend.entity.DTO.DataCriterionDTO;
import com.group4.datafactorybackend.entity.DTO.DataCriterionParameterDTO;
import com.group4.datafactorybackend.service.DataCriterionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;


/**
 * @author xin
 * @date 2022/7/27 13:38
 */
@Api(tags = "数据标准目录")
@RestController
@RequestMapping("/dataCriterion")
public class DataCriterionController {

    private final DataCriterionService dataCriterionService;

    @Autowired
    public DataCriterionController(DataCriterionService dataCriterionService) {
        this.dataCriterionService = dataCriterionService;
    }

    /**
     * @author 邹代鑫
     * @param dcCode 数据标准编号
     * @return R
     * @description 删除数据标准目录
     **/
    @ApiOperation("删除数据标准目录")
    @DeleteMapping("/delete/deleteCriterionDetail/{dcCode}")
    public R<?> deleteCriterionDetail(@PathVariable("dcCode") String dcCode) {
        this.dataCriterionService.deleteCriterionDetail(dcCode);
        return R.Success(ResultCodeEnum.SUCCESS.getMessage());
    }

    /**
     * @author 李泓静
     * @param dcCode 数据标准编号
     * @return R
     * @description 查看数据标准详情
     */
    @ApiOperation("查看数据标准详情")
    @GetMapping("/get/getDataCriterionDetail/{dcCode}")
    public R<?> getDataCriterionDetail(@PathVariable("dcCode") String dcCode) {
        return dataCriterionService.getDataCriterionDetail(dcCode);
    }

    /**
     * @author 邹代鑫
     * @param response 请求响应
     * @description 导出数据标准表格
     */
    @ApiOperation("导出数据标准表格")
    @GetMapping("/get/exportExcel")
    public R<?> exportExcel(HttpServletResponse response) {
        return this.dataCriterionService.exportExcel(response);
    }

    /**
     * @author 邹代鑫
     * @param file 导入文件
     * @description 导入数据标准表格
     */
    @ApiOperation("导入数据标准表格")
    @PostMapping("/post/importExcel")
    public R<?> importExcel(@RequestParam("file") MultipartFile file){
        //解析表格数据
        return this.dataCriterionService.importExcel(file);
    }

    /**
     * @author 卑微小峰
     * @param batchReleaseOrOutageDTO （批量）发布/停用接收参数实体类
     * @return R
     * @description 发布/停用数据标准
     */
    @ApiOperation("发布/停用数据标准")
    @PutMapping("/update/releaseOrOutage")
    public R<?> releaseOrOutage(@RequestBody @Validated BatchReleaseOrOutageDTO batchReleaseOrOutageDTO) {
        return dataCriterionService.releaseOrOutage(batchReleaseOrOutageDTO);

    }

    /**
     * @author 李泓静
     * @param dataCriterion xxx
     * @return R
     * @description 编辑数据标准
     */
    @ApiOperation("编辑数据标准")
    @PutMapping("/update/updateDataCriterion")
    public R<?> updateDataCriterion(@RequestBody DataCriterionDO dataCriterion) {
        return dataCriterionService.updateDataCriterion(dataCriterion);
    }

    /**
     * @author 章珑赢
     * @param parameterDTO 查询数据标准目录列表接收数据实体类
     * @return R
     * @description 查询数据标准目录列表
     */
    @ApiOperation("查询数据标准目录列表")
    @PostMapping("/post/dataCriterionList")
    public R<?> dataCriterionList(@RequestBody @Validated DataCriterionParameterDTO parameterDTO){
        return dataCriterionService.dataCriterionList(parameterDTO);
    }

    /**
     * @author 章珑赢
     * @param dataCriterionDTO 新增数据标准表实体类
     * @return R
     * @description 新增数据标准
     */
    @ApiOperation("新增数据标准")
    @PostMapping("/post/addDataCriterion")
    public R<?> addDataCriterion(@RequestBody DataCriterionDTO dataCriterionDTO){
       return dataCriterionService.addDataCriterion(dataCriterionDTO);
    }

}